import MyPromise from './06-my-promise.js'

const o = () => new MyPromise((resolve, reject) => {
  resolve('oooooo')
})
const p = new MyPromise((resolve, reject) => {
  // throw new Error('执行器错误')
  setTimeout(() => {
    resolve(100)
  }, 2000)
  // resolve(1)
  // reject(21)
})
const p1 = () => {
  return new MyPromise((resolve, reject) => {
    setTimeout(() => {
      resolve('p1')
    }, 1000)
    // resolve('p1')
  })
}
const p2 = () => {
  return new MyPromise((resolve, reject) => {
    resolve('error p2')
  })
}
p2().then(data => {
  console.log(data)
  return 1
}).then(val => {
  console.log(val)
  throw new Error('err')
}).then(val => {
  console.log(val)
  return
}).catch(err => {
  console.log(err)
})
// p2().finally(() => {
//   console.log('f')
//   return p1()
// }).then(data => {
//   console.log(data)
// }, err => {
//   console.log(err)
// })
// p.then().then().then(val => console.log(val), err => console.log(err))
// console.log(MyPromise.all([1, p1(), p2(), 3]).then(data => { console.log(data) }, err => { console.log(err) }))
// console.log(MyPromise.race([p1(), p2(), 1, 3]).then(data => { console.log(data) }, err => { console.log(err) }))
// console.log(MyPromise.resolve(10).then(data => { console.log(data) }, err => { console.log(err) }))
// console.log(MyPromise.resolve(p1()).then(data => { console.log(data) }, err => { console.log(err) }))
// let p1 = p.then(data => {
//   console.log(data)
//   return p1
// }, err => {
//   console.log(err)
// })
// p1.then(data => {
//   console.log(data)
//   return p1
// }, err => {
//   console.log(err)
// })
// p.then(data => {
//   console.log(data)
//   return o()
// }, err => {
//   console.log(err)
// }).then(data => {
//   console.log(data)
//   return 3
// }, err => {
//   console.log(err)
// }).then(data => {
//   console.log(data)
//   return 4
// }, err => {
//   console.log(err)
// })
var list = Array(100).fill(3);
function next () {
  var item = list.pop();
  if (item) {
    item = null;
    console.log(list.length)
    setTimeout(() => {
      next();
    });
    // next()
  }
}
next();